//导入debug模块，并定义两个名字空间
const debug = require("debug")("SchoolWallServer:[debug]");
//在www的定义的格式var debug = require('debug')('mybook-server:server');
const error = require("debug")("market-server:[error]");
//导入加密模块
const crypto = require("crypto");
const config = require("../common/config");
/**
 * JSONData说明
 * 
 * @typedef {Object} JSONData
 * @property {Number} code
 * @property {String} msg
 * @property {(Object | Array)} data
 * 
 */

/**
 * 统一格式返回的JSON数据
 * 200 - 返回成功
 * 201 - 请求成功
 * 204 - 成功响应
 * 
 * 300 - 重定向
 * 301 - 请求失败
 * 
 * 400 - 错误请求
 * 401 - 无访问授限
 * 402 - 无访问权限
 * 403 - 结果为空
 * 404 - 未找到
 * 409 - 冲突
 * 500 - 服务器错误
 * 
 * @param {Number} code  返回自定义的状态码 
 * @param {String} msg - 提示消息
 * @param {Object | Array} data - 数据结果
 * @returns {JSONData}
 */

function FormatJSONData(code, msg="", data=[]){
    if(!data){
        data = [];
    }
    return {code:code,msg:msg,data:data};
}

/**
 * 调试信息
 * @param {String} msg - 调试信息
 */
function log(msg){
    debug(msg);
}

/**
 * 带格式调试信息
 * @param {String} formatter - 带格式的字符串例如 %O, %j
 * @param {Object} data - 数据对象
 */
function logFormat(formatter, data){
    debug(formatter,data);
}

/**
 * 错误信息
 * @param {String} msg - 错误信息
 */
function err(msg){
    error(msg);
}


/**
 * 
 * @param {String} password  - 密码
 * @returns {String} - 16进取密码串
 */
function md5Pwd(password){
    let salt = config.salt;
    let md5 = crypto.createHash("md5");
    return md5.update(password+salt).digest("hex");
}

module.exports = {
    md5Pwd,
    FormatJSONData,
    log,
    err,
    logFormat
};
